该内容已被发布者删除 该内容被自由微信恢复
文章于 2021年9月5日 被检测为删除。
查看原文
被用户删除
其他

为什么不用 == 而用 .equals() 比较字符串?听完后,面试官对我的回答表示赞赏

鸭哥 鸭哥聊Java 2021-09-05

大家好,我是你们的鸭哥

记得点击关注下方公众号,领取 编程资

又到了招聘旺季,鸭哥的读者中,最近应该有不少小伙伴在准备面试吧。

不管有没有工作经验,基础是否扎实都是面试重点考察的点。正所谓基础不牢,地动山摇,基础知识不仅能反映语言功底,很多知识用法的易踩坑点更是经验教训的总结。


鸭哥也多次参与过面试,如果应聘者既掌握了所问的基础知识,又能说一些知识相关的易踩坑点,在鸭哥这里是很加分的。下面就分享一个面试时令鸭哥印象深刻的回答,这样答完后,平时比较严肃的鸭哥,也不经意间露出了赞赏的笑容~


问题:在 Java 中,我们为什么不用 == 而用 .equals() 比较字符串呢?

Java 中,String 属于引用数据类型。对字符串对象的比较,不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串对象的内容相同,只要它们引用的不是同一内容,使用比较运算符依旧会返回false。语言不够直观的话,代码来说话

public class compareString { public static void main(String[] args) { String s1 = "test"; String s2 = "test"; String s3 = s1; // 相同引用 String s4 = new String("test"); String s5 = new String("test");
if(s1 == s2 && s2 == s3){ System.out.println("s1,s2和s3使用比较运算符返回true,因为它们引用的是同一公共池中的同一对象"); }
if(!(s4 == s5)){ System.out.println("s4和s5使用比较运算符返回false,因为它们引用的是不同的对象"); }
if(s4 != null && s4.equals(s5)){ System.out.println("s4与s5引用的不同字符串对象的值相同"); } }}

在上面的代码中,遇到字符串常量时,编译器会使用该值创建一个 String 对象,s1, s2, s3 引用的是同一个字符串常量,所以它们的引用地址及引用对象的值都完全相同。
String Pool s1 -----------------> "test" <-----------------s2 || s3

对于 s4 和 s5,new 时分别创建了两个字符串对象,虽然字符串的内容相同,但是它们的引用地址是不同的。
Heap "test" <-------------------- s4
"test" <-------------------- s5
所以就有了下面的运行结果:


能答出上面这些内容,就反映出应聘者的基础是很扎实的。除此之外,实战方面,.equals() 还有一些注意事项如下。



当字符串对象为 null 时,调用 .equals() 方法会抛空指针异常。

String testStr1 = null;String testStr2 = new String("test");boolean result = testStr1.equals(testStr2); //因为testStr1为null,所以这里将抛出NullPointerException
//正确的写法是,先检查testStr1不为空,再调用.equals() 方法if(testStr1 != null) boolean result = testStr1.equals(testStr2);
当我们想要在忽略大小写的情况下比较两个字符串是否相等时,可以用.equalsIgnoreCase()方法。
String testStr3 = new String("abc");String testStr4 = new String("ABC");if(testStr3 != null) System.out.println(testStr3.equalsIgnoreCase(testStr4)); //此时输出比较结果:"true"

这些非必答的内容,答出来是有一定的加分效果的,因为这些内容一定程度上反映了实战经验。但所占篇幅不宜过长,应该把握住面试官提问的主要内容,不然效果可能适得其反。

每天一个入职小技巧,你有哪些面试技巧想要分享呢?欢迎在留言区讨论哦。


热门推荐:
扫描关注,永不迷路
点分享点点赞点在看
: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存